﻿// Copyright (c)  MOKEYISH. All rights reserved.
// Licensed under the MIT License, See License.txt in the project root for license information.

namespace NSQL.Expressions.Functions
{
    public interface IFunctionVisitor<out T>
    {
        T Visit(ICountFunction countFunction);
        T Visit(IRoundFunction roundFunction);
        T Visit(ISumFunction sumFunction);
        T Visit(IMaxFunction maxFunction);
        T Visit(IAvgFunction avgFunction);
        T Visit(IMinFunction minFunction);
        T Visit(IStdDevFunction stdDevFunction);
        T Visit(IVarianceFunction varianceFunction);
        T Visit(IToCharFunction toCharFunction);
        T Visit(ITrimFunction trimFunction);
        T Visit(ILengthFunction lengthFunction);
        T Visit(ICastFunction castFunction);
        T Visit(IToNumberFunction toNumberFunction);
        T Visit(ISubStringFunction stringFunction);
        T Visit(INvlFunction nvlFunction);
        T Visit(IPadFunction padFunction);
        T Visit(ILeftFunction leftFunction);
        T Visit(IRightFunction rightFunction);
        T Visit(IUpperFunction upperFunction);
        T Visit(ILowerFunction lowerFunction);
        T Visit(IReplaceFunction replaceFunction);
        T Visit(IExtractFunction extractFunction);
        T Visit(IConcatFunction concatFunction);
        T Visit(IReverseFunction reverseFunction);
        T Visit(IToDatetimeFunction toDatetimeFunction);
        T Visit(IAddIntervalFunction addIntervalFunction);
        
        T Visit(IStartWithFunction startWithFunction);
        T Visit(IEndWithFunction endWithFunction);
        T Visit(IContainsFunction containsFunction);

        T Visit(ISinFunction sinFunction);
        T Visit(ICosFunction cosFunction);
        T Visit(ITanFunction tanFunction);
        T Visit(IAbsFunction absFunction);
        T Visit(ISignFunction signFunction);
    }
}